home *** CD-ROM | disk | FTP | other *** search
/ Software 2000 / Software 2000 Volume 1 (Disc 1 of 2).iso / utilities / u366.dms / u366.adf / EditKeys / EditKeys.Doc < prev    next >
Text File  |  1992-03-25  |  20KB  |  445 lines

  1.  
  2.                 EditKeys v1.1
  3.                 -------------
  4.  
  5.                  © 1991 David Kinder
  6.                  -------------------
  7.  
  8. Introduction
  9. ------------
  10.  
  11. About a year ago, I was trying to find a program to allow me to edit the
  12. system keymap files. There were a few that let you put strings on keys, but
  13. none gave total control over all the features of keymaps. So I decided to
  14. write my own editor. I mean, how hard could it be..?
  15.  
  16. The result is EditKeys, a keymap editing program designed to work under
  17. both KickStart 1.3 and 2.0. EditKeys is written in machine code and compiled
  18. using HiSoft's Devpac v3 assembler, though it should not be that difficult
  19. to compile under other assemblers. EditKeys is freely distributable,
  20. provided that no more is charged than a nominal fee for copying and disk
  21. media. If you want to use a keymap created with EditKeys in a PD or
  22. commercial package then the only condition I impose is that I receive a
  23. credit somewhere in the program or its documentation.
  24.  
  25. Files
  26. -----
  27.     Program     - EditKeys
  28.               EditKeys.info
  29.     Documentation    - EditKeys.Doc
  30.     Disk Library    - arp.library (must be in LIBS:)
  31.     Source files    - EditKeys.s
  32.               Graphics.s
  33.               xdef.i
  34.               xref.i
  35.  
  36. About EditKeys
  37. --------------
  38.  
  39. EditKeys allows you to edit or create keymap files (They are found in the
  40. devs/keymaps/ directory of the system disk, which is only accessible from
  41. the CLI; there are no Workbench icons). If you don't know about these files,
  42. then perhaps I should explain.
  43.  
  44. When you press a key on the Amiga's keyboard, the key press is translated by
  45. the keymap file that the system is using (This will probably be 'gb'; the
  46. following assumes you are using a British Amiga). To see the effect of a
  47. keymap, boot with a standard 1.3 system disk, open a CLI window then type
  48.  
  49.     SYS:System/SetMap usa1
  50.  
  51. Now press the key marked with a hash '#'. Instead of the hash you expect, you
  52. get an apostrophe (which is what an American user would expect from that
  53. key).
  54.  
  55. A British 1.3 system disk contains two keymaps; 'gb' and 'usa1'. More keymaps
  56. can be found in the devs/keymaps/ directory of the 'Extras 1.3' disk.
  57.  
  58. More radical changes to the keys could be made; you could redefine the
  59. numerical keypad to produce alphabetic characters if you wanted to, or you
  60. can configure keys to output strings (useful for disk-menus etc.).
  61.  
  62. Please note that any changes made using EditKeys do NOT come into effect
  63. until you enter the SetMap command at the CLI prompt; only when you select
  64. 'Save' in EditKeys is a suitable keymap structure constructed and saved to
  65. disk so that the Amiga OS can use it.
  66.  
  67. Keymap Specifications
  68. ---------------------
  69.  
  70. At this point, perhaps I should define some of the terms I will use:
  71.  
  72.   Qualifier Key - CTRL, ALT or SHIFT keys. Do not produce output on their
  73.           own but qualify the output of other keys (eg Shift-f
  74.           produces 'F').
  75.  
  76.   Physical Key    - An actual key on the keyboard, the thing that you touch
  77.           when you type.
  78.  
  79.   Key        - A combination of a physical key and a qualifier, eg q is
  80.           a key, as is Shift-q, Alt-q, Shift-Alt-q, etc. Note that
  81.           Alt-q is an abreiviation for holding down the ALT key
  82.           while tapping the 'q' key.
  83.  
  84. Keymaps contain quite a lot of information, none of which appears in the user
  85. manuals but appears in the RKM under 'console.device' (Makes sense to put
  86. info about the keyboard in a programmer's manual eh?). Therefore I shall
  87. attempt to briefly describe what is possible.
  88.  
  89. Keys can be redefined to produce any character when pressed with one of the
  90. qualifiers, and also keys can produce strings of up to 32 characters.
  91. Physical keys with a STRING key on them may not have DEAD or MODIFIABLE keys
  92. on them (see below).
  93.  
  94. Some keys repeat when held down (eg all alphabetic keys), while others do not
  95. (eg the <RETURN> key). Physical keys which repeat are referred to as
  96. REPEATABLE (fairly obvious). Whether a key repeats or not is controlled by
  97. the keymap. Similarly, the keymap controls whether a key is CAPSABLE or not.
  98. When the 'Caps Lock' light is on, some keys produce their Shifted values (eg
  99. 'q'), while the numerical keys produce their normal values.
  100.  
  101. Some keys are DEAD, while others are MODIFIABLE. For an example of this, open
  102. a CLI window, then hold down ALT while tapping the 'f' key (From now on
  103. abrieviated to Alt-f); nothing happens. Now tap the 'a' key, the result is
  104. an a with an accent over it: 'á'. The key Alt-f is a DEAD key, while 'a' is a
  105. MODIFIABLE key. When you type Alt-f, the Amiga stores the deadkey, which it
  106. then uses to modify the output of the 'a' key. Not all keys are MODIFIABLE,
  107. Alt-f followed by 'q' just produces 'q'. A physical key with DEAD or
  108. MODIFIABLE keys on it may NOT have STRING keys on it.
  109.  
  110. There is a further limitation in that those physical keys that are not DEAD
  111. or MODIFIABLE use only 4 bytes for their definition, eg on the 'A' key on
  112. your keyboard there is 'a', 'A', 'æ' and 'Æ'. However, there are 8 different
  113. permutations of the Shift, Alt and Control qualifiers with the key, so not
  114. every combination of physical key with qualifier can be uniquely defined.
  115. Why didn't Commodore use 8 bytes for each key??? (sigh). There is one other
  116. point; if a physical key has definitions for Shift and Alt (and thus
  117. Shift-Alt) then we can configure the key so that the Control qualifier
  118. outputs the value that would appear without the Control key being pressed,
  119. but with bits 6 and 7 cleared (eg Control-c). Confused? You're not the only
  120. one... But playing around with EditKeys should make all this clear (or at
  121. least clearer than it is at present).
  122.  
  123. To install a keymap in the system, you use the 'SetMap' program found in the
  124. System drawer of a standard Workbench disk. It is worth noting before I start
  125. on a discussion of EditKeys that once you have loaded a keymap into AmigaDOS
  126. with SetMap, it will not flush it from memory until you reboot (this is
  127. because the system expects keymaps not to change). So if you used say
  128. 'SetMap gb' (as in a UK Startup-Sequence), then edited 'gb' using EditKeys
  129. and reissued a 'SetMap gb' command at the CLI, then you would not get your
  130. new keymap, as the system would just use the version of 'gb' loaded first. To
  131. get around this simply save the edited keymap under a new name eg. 'gb2'.
  132. Furthermore, a keymap should have its name embedded in it, so if you rename
  133. a keymap EditKeys will no longer believe that it really is a keymap (although
  134. it will still work with the 1.3 SetMap command).
  135.  
  136. The Program
  137. -----------
  138.  
  139. EditKeys allows you to modify all the above features of a keymap. Keys may be
  140. made DEAD or MODIFIABLE, or have STRING definitions put on them, as well as
  141. being redefined. The program may be started from CLI or Workbench:
  142.  
  143. From Workbench: Just double click on the program's icon. A File Requester
  144.         will appear for you to select a keymap to load. Click on
  145.         a keymap or 'Cancel'.
  146.  
  147. From CLI:    1) Just type the program's name, ie
  148.  
  149.             EditKeys
  150.  
  151.         The program will attempt to open the arp.library and display
  152.         a requester prompting you for a keymap to load. Select a
  153.         keymap or click on 'Cancel' to start the program without a
  154.         keymap loaded. Or,
  155.  
  156.         2) Pass a keymap name to the program, ie.
  157.  
  158.             EditKeys [keymap]
  159.  
  160.            eg    EditKeys gb
  161.  
  162.         You do not need to specify the path of the keymap as EditKeys
  163.         will automatically use DEVS:keymaps/. If the keymap name is
  164.         NOMAP then EditKeys will start without loading a keymap. Or,
  165.  
  166.         3) Enter the line
  167.  
  168.             EditKeys ?
  169.  
  170.         Which will bring up a template. Entering a further ? will
  171.         prompt you with a small help message. Enter a keymap name
  172.         or NOMAP (see above).
  173.  
  174. When the program has loaded it will open a window on the Workbench screen.
  175. In the titlebar is the name of the keymap being edited; below that is a
  176. representation of the A500/A2000 keyboard with the keymap you chose. Note
  177. that it may appear to you that the keyboard has acquired two extra keys
  178. (one to the right of the left Shift key and the other to the left of the
  179. Return key), but the Rom Kernel Manual assures me that they are on all
  180. keyboards except UK and American ones...
  181.  
  182. Furthermore, the representation of the keymap usually shows what is output
  183. by that key, but for certain keys (eg Esc, Help, Del, F1-F10) I have chosen
  184. to use a little graphic which never changes as this looks better. If you need
  185. to be certain what a key outputs, click on it; its output will be displayed
  186. at the bottom to the EditKeys window.
  187.  
  188. Qualifier keys (Shift etc.) displayed on the screen work as expected; click
  189. on Shift to see the effect. The program is run using the menu and the five
  190. mode gadgets displayed below the keyboard; each gadget represents a different
  191. aspect of the keymap that can be edited. To choose a mode, simply click on
  192. its gadget. The five modes are:
  193.  
  194.     KeyMap       - Used to (re)define output of any key
  195.     Capsable   - Used to determine which keys are capsable
  196.     Repeatable - Used to determine which keys repeat
  197.     Modifiable - Used to define which keys are modifiable
  198.     Deadkeys   - Used to define dead keys
  199.  
  200. I will deal with these sections in increasing order of complexity.
  201.  
  202. Capsable
  203. --------
  204.  
  205. As explained above, physical keys can be CAPSABLE or not, and this mode lets
  206. you set this function for each physical key. If the key is highlighed then
  207. that key is capsable; if it is not then the physical key isn't. The qualifier
  208. gadgets are ghosted as they serve no purpose in this mode. Simply click on a
  209. key with the mouse to change it's state.
  210.  
  211. Repeatable
  212. ----------
  213.  
  214. Basically the same as the above Capsable mode, except that this mode is used
  215. to control which keys are REPEATABLE or not. Works in exactly the same way as
  216. above.
  217.  
  218. Deadkeys
  219. --------
  220.  
  221. As expained above, keymaps can contain DEAD keys, and this mode allows you to
  222. set them. Click on a key to make it dead or turn it back to normal. Deadkeys
  223. don't do anything immediately when pressed; thus when you turn a dead back to
  224. normal the key is blank. Since each particular key can be DEAD or not, the
  225. qualifiers are active.
  226.  
  227. If you make a key dead, and the physical key that key is on already has
  228. another deadkey, then you can make the second deadkey act in the same way as
  229. the first. This isn't too useful, but it's implemented in the CBM keymaps, so
  230. here it is.
  231.  
  232. Deadkey definitions are stored within the keymap in a completely diffent way
  233. to ordinary keys, so if a physical key has deadkeys on it, then it can be
  234. defined for any combination of qualifiers. As expained earlier, this is not
  235. so for ordinary keys. If you turn a deadkey back to normal and it is the last
  236. deadkey on that physical key, EditKeys will try to resolve this without
  237. destroying any definitions; but if it can't a requester will appear asking
  238. you which definitions you want to get rid of. As a general rule the least
  239. useful set of definitions are those with the Control qualifier, so I'd remove
  240. these first if I were you, but it's your choice. As also explained above, if
  241. a normal key has definitions for Shift, Alt and Shift-Alt, then the Control
  242. key may have a special effect on it - it may clear bits 6&7 of the normaly
  243. output character (eg if you enter Control-c in the string gadget, you get
  244. a capital C in reverse (try it and see)). If it is possible to do this with
  245. the key as we convert it from dead to normal, a requester will appear asking
  246. whether you want this feature or not (As a general rule, in the CBM supplied
  247. keymaps it is turned on for most alphabetic keys).
  248.  
  249. You can have a maximum of 15 deadkeys, a limitation imposed by the keymap,
  250. not me. 15 should be enough anyway. If you define 15 diffent deadkeys then
  251. all non-dead keys will be ghosted as no more can be defined. Turn a deadkey
  252. back to a normal key to de-ghost all the other keys. Physical keys with
  253. STRING keys on them cannot also have DEAD keys on them; thus all string keys
  254. are ghosted and unselectable. Physical keys with MODIFIABLE keys on them may
  255. also have DEAD keys on them.
  256.  
  257. Modifiable
  258. ----------
  259.  
  260. This mode works in exactly the same way as the above 'Deadkeys', except that
  261. it allows you to select which keys are MODIFIABLE. Note that I have imposed
  262. an arbitrary limit of 256 modifiable keys in any one keymap, but I doubt that
  263. you would ever need anything like this figure.
  264.  
  265. KeyMap
  266. ------
  267.  
  268. This is the mode you will probably most often use; it allows you to redefine
  269. what each key outputs when pressed. Since this bit is quite complex, I'll
  270. split it into several sections.
  271.  
  272. Click on the qualifiers and a key to select which key you want to edit. The
  273. selected key will appear highlighted (ie yellow lettering on a black
  274. background), and the cursor in the string gadget below the keyboard will
  275. activate. If you now type something, it will appear in this gadget (since it
  276. is just an Intuition string gadget you can also just click inside it to
  277. re-activate it). There are various types of keys in a keymap (as detailed
  278. previously) so I shall explain how the editing fuctions affect each one:
  279.  
  280. Deadkeys    - Since deadkeys do not output anything themselves but change
  281.           the output of other keys, you cannot edit a deadkey and so
  282.           such keys are ghosted in this mode. However they are used
  283.           in conjuction with modifiable keys (see section below).
  284.           Since physical keys with deadkeys on them may also have
  285.           keys that work normally (eg Alt-f is a deadkey; Shift-f and
  286.           f just work as normal) such keys (eg f) can be edited as
  287.           detailed below with the restriction that such keys may NOT
  288.           have strings on them.
  289.  
  290. Ordinary keys    - This is the majority of keys, which have no special
  291.           features (eg deadkeys). When you click on such a key, the
  292.           character output by this key will appear in the little box
  293.           to the left of the string gadget below the keymap.
  294.  
  295.           If you enter a single character into the string gadget,
  296.           then this will become the character output by the selected
  297.           key, and the picture of the keymap will change to reflect
  298.           this. As not all combinations of qualifier and physical key
  299.           can be uniquely redefined, at certain times (especially if
  300.           you edit a key with the Control qualifier (eg Control-q)) a
  301.           requester will appear telling you that some definitions
  302.           will have to be lost in order to allow your editing, and
  303.           giving you the option of aborting or letting EditKeys
  304.           remove some of the other definitions on that physical key.
  305.  
  306.           Futhermore, the combination of Shift-Alt-Control-key cannot
  307.           be defined at all for ordinary keys. If you try this
  308.           EditKeys will tell you that this is not possible.
  309.  
  310.           If you enter more than one character into the string
  311.           gadget, EditKeys will convert that key into a STRING type
  312.           key (see below).
  313.  
  314. Modifiable keys - Modifiable keys (eg a) can have their output modified by
  315.           deadkeys (eg Alt-f followed by a produces á). Such keys
  316.           can be edited as above except that strings are not
  317.           permissible on such keys, thus you can redefine what 'a'
  318.           outputs. But what if you want to redefine what Alt-f
  319.           followed by 'a' outputs?
  320.  
  321.           If you double click the right mouse button, a requester
  322.           titled 'Select deadkey' will appear. This allows you to
  323.           choose a deadkey to be used in editing modifiable keys.
  324.           The requester has gadgets to accept the current deadkey,
  325.           quit without changing anything, or clearing the current
  326.           deadkey. To select a deadkey simply type it in at the
  327.           keyboard (eg hold down Alt and press f). The text 'A-f'
  328.           will appear in the box. Enter another deadkey if you want
  329.           to change or press the 'Clear' gadget if you don't want to
  330.           use a deadkey anymore, then click 'Use this deadkey'. The
  331.           name of the deadkey (eg A-f (which is short for Alt-f))
  332.           will now appear in the far left box at the bottom of the
  333.           EditKeys window. Now click on a modifiable key (eg a) and
  334.           the character output by the combination of the selected
  335.           deadkey and the selected modifiable key will appear in the
  336.           box to the left of the string gadget (if you are using my
  337.           example an 'á' will appear there). Now when you enter a
  338.           character into the string gadget will edit what is output
  339.           by the combination of the selected deadkey and the selected
  340.           modifiable key. Try it - it is fairly obvious once you're
  341.           used to it.
  342.  
  343. String keys    - Lastly, string keys. If you click on a string key (or
  344.           change an ordinary key into one by entering more than one
  345.           character into the string gadget) then the box to the left
  346.           of the string gadget turns yellow. String keys may be
  347.           edited in the normal way, except that you may enter up to
  348.           32 characters to be output by each key (Some keymaps seem
  349.           to have more than this, but the RKM seems to suggest 32 is
  350.           the safe limit for the console buffer, so 32 it is).
  351.  
  352.           Note that string keys are usually displayed by EditKeys on
  353.           its picture of the keymap as the letters 'STR' where
  354.           possible (eg 'Help' is a string key but it always appears
  355.           as 'Help' in the little picture as this looks neater).
  356.  
  357.           If you edit a physical key with strings on it so that each
  358.           string is only one character, EditKeys will give you the
  359.           option of converting that physical key back to an ordinary
  360.           key (which saves memory). As usual, EditKeys may have to
  361.           remove some definitions to accomodate this; a requester
  362.           will appear to warn you if this is the case.
  363.  
  364.           Note that if at any time you want to put a carriage return
  365.           in a string, use control-m (a reversed M will appear in the
  366.           string gadget). This is useful for eg. putting common CLI
  367.           commands on function keys. Thus, if you put
  368.  
  369.             list*
  370.  
  371.           (where * represents control-m) on F1, then with this keymap
  372.           in use via SetMap, pressing F1 will send a list command to
  373.           the CLI as if you had typed it in and pressed <RETURN>.
  374.  
  375. There is one further point - to the right of the string gadget is a gadget
  376. marked <CSI>. What does this mean? Well, if you click a key such as F1 (with
  377. a standard CBM keymap loaded), you will get something like *0~ where * is a
  378. little square box. This box is used for characters that are not specifically
  379. defined for that font, and in this case the character is $9B hex, which is
  380. known as the 'Control Sequence Inducer', or <CSI> for short. <CSI> is used to
  381. indicate that what follows is not to be output directly but is to be
  382. interpreted by the Amiga to eg. change the text colour etc. There are too
  383. many sequences to document here (they are in the RKM under 'console.device').
  384. Since you can't enter the character $9B directly using a CBM keymap, clicking
  385. the <CSI> gadget puts this character as the first character in the string
  386. gadget, from there there it behaves as any other characater.
  387.  
  388. The Menu
  389. --------
  390.  
  391. The remaining functions of EditKeys are accessed through the pull-down
  392. menu. These are:
  393.  
  394. New    - Completely clears all information from EditKeys, so allowing you
  395.       to create a keymap completely from scratch (but believe me, it's
  396.       easier to edit an existing one!).
  397.  
  398. Load    - A file requester appears to allow you to select a keymap to load
  399.       in. Note that the keymap does not have to be in DEVS:keymaps/ for
  400.       to you to be able to load it in.
  401.  
  402. Save    - Saves the current keymap. The keymap is saved to the name of the
  403.       keymap last loaded. Note that any previous keymap of the same name
  404.       is overwritten (so be carefull!!).
  405.  
  406. Save As - A file requester appears to allow you to select the filename that
  407.       you wish the current keymap to be saved to. Again, you do not need
  408.       to save to the DEVS:keymaps/ directory, but if you don't, you won't
  409.       be able to SetMap the keymap without moving it elsewhere or playing
  410.       around with the Assign command.
  411.  
  412. About    - Guess.
  413.  
  414. Iconify - Since the EditKeys window is rather large, you can use this option
  415.       to shrink EditKeys down to a tiny window with just one gadget in
  416.       it. Click on the gadget to make EditKeys reopen its normal window
  417.       and resume normal operations.
  418.  
  419. Quit    - Guess... A requester checks that you are sure before quiting (any
  420.       unsaved keymaps will be lost if you quit!).
  421.  
  422. Well, I think that's it. I think (hope!) the program is easier to use that
  423. this file is to understand, so just use EditKeys and all should become clear.
  424.  
  425. If for any reason you want to contact me about EditKeys, the address is
  426.  
  427.       David Kinder,
  428.       28, Langholm Rd.,
  429.       Garswood,
  430.       Ashton-in-Makerfield,
  431.       Lancs.
  432.       WN4 0SG.
  433.       ENGLAND.
  434.  
  435. History
  436. -------
  437.  
  438. v1.0      First release.
  439.  
  440. v1.1      Improved appearance under KickStart 2.
  441.  
  442.  
  443.       "Rise and Reverberate"
  444.  
  445.